package org.asportoonline.integration;

import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import org.asportoonline.entities.Cliente;
import org.asportoonline.entities.Prenotazione;
import org.asportoonline.entities.ProdottoPrenotato;

/**
 * Questa classe implementa i metodi di ProdottoPrenotatoFacade, necessari per interfacciarsi con l'entità 
 * ProdottoPrenotato.
 * 
 * @author fe
 * @see ProdottoPrenotatoFacade
 */
@Stateless
public class ProdottoPrenotatoFacadeImplementation extends AbstractFacade<ProdottoPrenotato> implements ProdottoPrenotatoFacade {
    @PersistenceContext(unitName = "AsportoOnline-ejbPU")
    private EntityManager em;

    protected EntityManager getEntityManager() {
        return em;
    }

    public ProdottoPrenotatoFacadeImplementation() {
        super(ProdottoPrenotato.class);
    }
    
    /**
     * Inserisce un nuovo ProdottoPrenotato.
     * 
     * @param prodottoPrenotato 
     * @see ProdottoPrenotato
     */
    @Override
    public void create(ProdottoPrenotato prodpren) {
        em.persist(prodpren);
    }

    /**
     * Cerca tutti i ProdottiPrenotati di una certa prenotazione
     * 
     * @param prenotazione prenotazioni di cui si vogliono ottenere tutti i ProdottiPrenotati
     * @return una lista contenente tutti i ProdottiPrenotati della Prenotazione prenotazione
     * @see ProdottoPrenotato
     */
    public List<ProdottoPrenotato> fetchPrenotationProducts(Prenotazione prenotazione) {
        Query query = em.createQuery("select pp from ProdottoPrenotato pp where pp.idProdottoPrenotato.idpren = :idpren");
        query.setParameter("idpren", prenotazione.getIdPrenotazione());
        List<ProdottoPrenotato> lpp = (List<ProdottoPrenotato>)query.getResultList();
        
        if(lpp==null || lpp.isEmpty())  return null;
        return lpp;
    }

}
